package com.tedu.api.list;

import org.junit.Test;

import java.sql.SQLOutput;
import java.util.*;

/**
 * List集合
 * Collection顶级集合接口【容器】---List集合【子接口】
 * List集合存储数据：存储有序并且重复的元素
 * List集合--接口--无法创建对象
 * 实现类：
 * ArrayList:【常用：List与ArrayList的方法完全一致】数组实现
 * LinkedList:双向链接实现
 * Vector:jdk1.0版本：性能：增删效率慢，线程安全！--ArrayList
 * 重点：掌握List接口集合中所有方法
 */
public class ListAPI {
    /**
     * get(int index)     返回值：E ---理解：Object
     * 作用：获取给定下标处的元素，从0开始
     *
     */
    @Test
    public void testGet(){
        //List集合 ----
        List<String> List=new ArrayList<>();
        List.add("三生三世");
        List.add("你的名字");
        List.add("抓娃娃");
        System.out.println("List集合："+List);
        //
        String str=List.get(1);
        System.out.println("获取集合中："+str);
        //需求:获取List集合中所有的元素 ---普通for
        for (int i=0;i<List.size();i++){//针对集合--下标：从0开始
         str=List.get(i);
            System.out.println("遍历List集合："+str);

        }
           /**
            *set()
            */

    }
    @Test
    public void testSet(){
        List<String> List=new ArrayList<>();
        List.add("三生三世");
        List.add("你的名字");
        List.add("抓娃娃");

    }
    /**List继承Collcetion[重载：拓展功能]
     * add(int index,E e)       返回值：void
     * 作用：将给定元素插入指定位置
     * remove()       返回值：E
     * 作用：将给定位置的元素从集合中删除
     *
     *特点：查询快，增删满--选择List/ArrayList
     */
    @Test
    public void testAR(){
        //创建List集合--重写方法add() 重载方法add(下标,"元素")
        List<String> list=new ArrayList<>();
        list.add("秦始皇"); list.add("汉武帝"); list.add("王安石"); list.add("潘金莲");
        System.out.println("List集合元素："+list);
        list.add(2,"武大郎");
        System.out.println("List集合元素："+list);
        list.remove(2);
        System.out.println("List集合元素："+list);
    }
    /**
     * List集合
     * subList(int start,int end)   返回值：list<E>
     * 作用：截取范围内的子集  口诀：含头不含尾
     */
    @Test
    public void testSubList(){
        //创建集合，10个元素：0~9
        List<Integer> list=new ArrayList<>();
        for (int i=0; i<10;i++){//i 循环针对下标
            list.add(i);
        }
        System.out.println("List集合："+list);
        //获取子集：list集合元素中3~8之间的元素
        List<Integer> listch=list.subList(3,9);
        System.out.println("获取子集："+listch);
        //获取子集:list集合元素中2~6之间的元素，子集扩大10倍
        //1.获取子集（从list集合中取2~6之间元素）
        //2.for循环 遍历子集，遍历同时给每个下标的元素×10倍
    }
    @Test
    public void testSublist(){
        List<Integer> list=new ArrayList<>();
        for (int i=0;i<10;i++){
            list.add(i);
        }
        System.out.println("集合元素："+list);
        List<Integer> listch=list.subList(2,7);
        for (int i= 0; i<listch.size(); i++) {
            listch.set(i,listch.get(i)*10);
        }
        System.out.println("获取子集："+listch);
        /**
         *需求：清空lch子集   输出：list  【0,1,7,8,9,】
         * 特点：清空clear以及设置set直接对集合做操作
         */
        System.out.println("【List】"+list);
        listch.clear();
        System.out.println("清空子集:【List】"+list);
    }
    /**
     * 集合排序
     *
     * Random   伪随机数类          包位置：Java.util
     * nextInt()  返回值是一个伪随机整数【范围：0~数值】
     *
     * Collection 集合工具类    静态方法 sort
     * sort()方法:针对集合元素是数值进行排序【默认：升序】！返回值：List
     * 需求：随机生成10个元素【整数：100以内】的集合---对集合排序
     */
    @Test
    public void testArrayList(){
        //创建List集合<整数>
        List<Integer> list=new ArrayList<>();
        //创建伪随机数
        Random r=new Random();
        for (int i=0;i<10;i++){ //10个元素
         list.add(r.nextInt(100));  //100以内
        }
        System.out.println("打印List:"+list);
        //对list集合元素进行排序  Collection.sort(集合)
        Collections.sort(list);
        System.out.println("【有排序】打印List:"+list);

    }
    /**
     * 需求：创建集合，存汉字，排序--【无规则】
     * sort(集合，Comparator)   重载功能：拓展排序的功能
     * 集合：排序集合
     * Comparator比较器接口：指定规则--【定规则：按照字符串长短排序】
     * 重写：Compare()--定义比较规则，默认自带交换功能
     */
    @Test
    public void testCompartor(){
        //创建集合--存 汉字
        List<String> list=new ArrayList<>();
        list.add("阿西吧");
        list.add("搜都寺内");
        list.add("呦西");
        //比较器规则定义：按照字符串长短进行排序
        //Comparator比较器接口--创建1次对象--采用匿名内部类
        Comparator<String> com=new Comparator<String>(){
            //compare方法：针对集合【自定义】排序
            //参数1：泛型：Object o1 集合中假设第一【交换】个元素
            //参数2：泛型：Object o2 集合中假设第二【交换】个元素
            public int compare(String o1, String o2) {
                /**
                 * 返回值 大于 0  4-2 交换
                 * 返回值 小于 0  3-4 不交换
                 * 返回值 等于 0   不变
                 */
                return o2.length()-o1.length();
            }
        };


        Collections.sort(list,com);
        System.out.println("排序后集合："+list);
    }

}
